package is202.hrms.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;


/** 
 * Dette er en entity klasse, dvs. at den er koblet til en tabell i databasen.
 * Standardnavnet er det samme som klassenavnet,så Register objekter
 * blir lagret i tabellen REGISTER. */
@Entity
public class Register implements Serializable {

    private static final long serialVersionUID = 42L;

    /** @Id brukes for å markere registerNr som primærnøkkel.
     * @GeneratedValue skrur på automatisk generering av verdier på primærnøkkel
     */
    @Id
    @GeneratedValue
    private long registerNr;


    /** @NotNull og @Size er constraints på verdien av navn
     * Standard kolonnenavn er det samme som feltnavn,så vi trenger ingen merknader
     * for å spesifisere kolonneavn,hvis ikke man trenger å koble til en
     * eksisterende database */
    @NotNull
    @Size(min = 1)
    private String uname;
    private String pass;
    private String email;
    private String usertype;

    /** 
     * @OneToMany markerer Register som en en-til-mange relasjon.
     */
    @OneToMany(mappedBy = "")
    private List<Register> register;


    /** Getters og setters */
    public Register() {
        register = new ArrayList<Register>();
    }

    public long getRegisterNr() {
        return registerNr;
    }

    public void setRegisterNr(long registerNr) {
        this.registerNr = registerNr;
    }

     public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }
    public String getEmail(){
        return email;
    }
    public void setEmail(String email){
        this.email = email;
    }
    public String getUsertype(){
        return usertype;
    }
    
    public void setUsertype(String usertype){
        this.usertype = usertype;
    }

    public List<Register> getRegister() {
        return register;
    }

    /** hashCode() og equals() må overstyres, og de må være konsistente.
     * Hvis a.equals(b) så må også a.hashCode() == b.hashCode() 
     * være sann */
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 29 * hash + (int) (this.registerNr ^ (this.registerNr >>> 32));
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }

        Register other = (Register) obj;
        if (registerNr != other.registerNr) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(registerNr);
        sb.append(" ");
        sb.append(uname);
        sb.append(pass);
        sb.append(email);
        sb.append(usertype);

        return sb.toString();
    }
}
